<?php

namespace Orders\Entity;

class PushOrderBodyEntity
{
	private string $currencyCus		=	'142';	// 币制（关）
	private string $currencyCiq		=	'156';	// 币制（检）
	private string $itemRecordNo	=	'S46111000308N';	// 账册备案料号
	private string $itemDescribe	=	'';	// 商品描述
	private string $barCode			=	'';		// 商品条形码
	private string $wrapTypeCus 	=	'';	// 内件包装种类代码（关）
	private string $wrapTypeCiq 	=	'';	// 内件包装种类代码（检）
	private string $note 			=	'';			// 备注。
	private string $field1 			=	'';			// 表体预留字段1
	private string $field2 			=	'';			// 表体预留字段2
	private string  $field3 		=	'0.00';			// 表体预留字段3

	
	private string $itemNo;			// 商品货号
	private string $itemName;		// 商品名称
	
	
	private string $gcode;			// 商品编码
	private string $brand;			// 商品品牌
	private string $gmodel;			// 商品规格型号
	private string  $qty;			// 商品数量
	private string $unitCus;		// 计量单位（关）
	private string $unitCiq;		// 计量单位（检）
	private string  $qty1;			// 法定数量
	private string $unitCus1;		// 法定计量单位
	private string  $Qty2;			// 法定第二数量
	private string $unitCus2;		// 法定第二计量单位
	private string  $price;			// 商品单价
	private string  $totalPrice;		// 商品总价
	
	
	private string $country;		// 原产国（地区）
	private string $usage;			// 用途编号

	public function __construct(array $param)
    {
		$this->itemNo=$param['itemNo'];			// 商品货号
		$this->itemName=$param['itemName'];		// 商品名称
		$this->gcode = $param['gcode'];
		$this->brand=$param['brand'];			// 商品品牌
		$this->gmodel=$param['gmodel'];			// 商品规格型号

		$this->qty=$param['qty'];			// 商品数量
		$this->unitCus=$param['unitCus'];		// 计量单位（关）
		$this->unitCiq=$param['unitCiq'];		// 计量单位（检）

		$this->qty1=$param['qty1'];			// 法定数量
		$this->unitCus1=$param['unitCus1'];		// 法定计量单位

		$this->Qty2=$param['Qty2'];			// 法定第二数量
		$this->unitCus2=$param['unitCus2'];		// 法定第二计量单位

		$this->price=$param['price'];			// 商品单价
		$this->totalPrice=$param['totalPrice'];		// 商品总价
	
		$this->country=$param['country'];		// 原产国（地区）
		$this->usage=$param['usage'];			// 用途编号
	
    }

    public function getAllAttributes(): array
    {

        $attributes = [];
        $reflectionClass = new \ReflectionClass($this);
        $properties = $reflectionClass->getProperties(\ReflectionProperty::IS_PRIVATE);

        foreach ($properties as $property) {
            $propertyName = $property->getName();
            if(is_null($this->$propertyName)){
                throw new \Exception("方法 $propertyName 不能为空");
            }
            $attributes[$propertyName] = $this->$propertyName;
        }

        return $attributes;
    }
	// Setter方法
	public function __set($name, $value) {
        if (property_exists($this, $name)) {
            $this->$name = $value;
        } else {
            throw new \Exception("Property $name does not exist");
        }
    }

    // Getter方法
    public function __get($name) {
        if (property_exists($this, $name)) {
            return $this->$name;
        } else {
            throw new \Exception("Property $name does not exist");
        }
    }
}

